package com.qf.service.impl;

import com.qf.dao.UserDao;
import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.test.OrderDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @component:标记在类上（注解），可以通过组件扫描创建bean对象
 *    value属性可以指定对象在容器中的名称，相当于bean标签的id 属性
 * @component:衍生了三个子注解，作用跟@component一样
 * @controller 一般用于控制层（controller）
 * @service 一般用于业务层（service）
 * @Repository 一般用于持久层（dao），一般不用
 * @AutoWired: 自动装配，自动从ioc容器中找到相同的对象，赋值给属性
 * 如果ioc容器中有多个相同的对象，那么会根据属性查找对象：如果根据属性名不能找到对象
 * ，则抛出类型不唯一的异常   如果有多个类型相同对象，可以使用@Qulifier注解指定对象名称
 * @Qualifier  只能跟@AutoWired一起使用
 * @AutoWired  默认根据类型查找对象
 * @AutoWired  由spring框架提供
 * @Resource
 *      自动装配，自定从ioc容器中找到相同类型的对象，赋值给属性
 *      默认按照名称查找对象，如果名称找不到，则按照类型查找对象
 *      @Resource 由jdk提供
 *
 *
 *      @Transactional:事务注解配置
 *              需要在配置文件中添加，开启事务注解配置
 *              注解用在类上，类中所有方法开启事务
 *              注解用在方法上，该方法开启事务
 */

@Component("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    @Qualifier("orderDaoImpl1")
    OrderDao orderDao;
    @Autowired
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public List<User> findUserList() {
        System.out.println("++++++++++++++++++"+orderDao);
        return userDao.queryAll();
    }

    /**
     * 从 from 转到  to  ， 转2块
     *
     * @param from
     * @param to
     */
    @Transactional
    @Override
    public void transfer(String from, String to) {


            User fromUser = userDao.findByUsername(from);
            User toUser = userDao.findByUsername(to);

            //更新余额
            fromUser.setMoney(fromUser.getMoney() - 2);
            toUser.setMoney(toUser.getMoney() + 2);
            //更新数据库
            userDao.update(fromUser);
            //System.out.println(1/0);
            userDao.update(toUser);




    }
}